package action.chap4;


import java.util.List;

import static java.util.stream.Collectors.toList;

public class Demo01 {
    public static void main(String[] args) {
        List<Dish> menus = DishUtils.getListDish();
        //Lambda方法的引用
        //  List<String> collect = menu.stream().filter(dish -> dish.getCalories() > 300).map(Dish::getName).limit(3).collect(Collectors.toList());
        //诸如filter或sorted等中间操作会返回另一个流。这让多个操作可以连接起来形成一个查
        //询。重要的是，除非流水线上触发一个终端操作，否则中间操作不会执行任何处理——它们很懒。
        List<String> names =
                menus.stream()
                        .filter(d -> d.getCalories() > 300)
                        .map(Dish::getName)
                        .limit(3)
                        .collect(toList());
        // System.out.println(names);
        names.forEach(System.out::println);
        //System.out.println(collect);
        //终端操作会从流的流水线生成结果。其结果是任何不是流的值，
        long count = menus.stream()
                .filter(d -> d.getCalories() > 300)
                .distinct()
                .limit(3)
                .count();
        System.out.println("=================");
        List<Dish> dishes =
                menus.stream()
                        .filter(d -> d.getType() == Dish.Type.MEAT)
                        .limit(2)
                        .collect(toList());
        System.out.println(dishes);
    }


}
